﻿namespace ProblemsSet
{
    public class Problem_129 : BaseProblem
    {
        public override object GetResult()
        {
            const int max = 1000000;

            MathLogic.GetPrimeList(max);

            for (long n = 7; n <= long.MaxValue; n += 2)
            {
                var tmp = MathLogic.GetANotForPrimes(n, max);
                if (tmp >= max)
                    return n;
            }
            return -1;
        }

        public override string Problem
        {
            get
            {
                return @"A number consisting entirely of ones is called a repunit. We shall define R(k) to be a repunit of length k; for example, R(6) = 111111.

Given that n is a positive integer and GCD(n, 10) = 1, it can be shown that there always exists a value, k, for which R(k) is divisible by n, and let A(n) be the least such value of k; for example, A(7) = 6 and A(41) = 5.

The least value of n for which A(n) first exceeds ten is 17.

Find the least value of n for which A(n) first exceeds one-million.";
            }
        }

        public override bool IsSolved
        {
            get
            {
                return true;
            }
        }

        public override object Answer
        {
            get
            {
                return 1000023;
            }
        }
    }
}
